package pe.com.bn.sach.dao.impl;

import java.sql.Connection;

import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.Logger;


import com.ibatis.sqlmap.client.SqlMapClient;

import pe.com.bn.sach.domain.Bnchf54ParamDocumentTitular;
import pe.com.bn.sach.domain.Bnchf54ParamReqsDesgrav;
import pe.com.bn.sach.domain.Bnchf54ParamReqsFam;
import pe.com.bn.sach.domain.Bnchf54ParamReqsTit;
import pe.com.bn.sach.domain.Bnchf54ParamTasaInteres;
import pe.com.bn.sach.domain.Bnchf54ParametroProducto;
import pe.com.bn.sach.domain.BnchfCatalogoProducto;
import pe.com.bn.sach.domain.BnchfDesgravamen;
import pe.com.bn.sach.domain.BnchfTarProd;
import pe.com.bn.sach.domain.BnchfTarifa;
import pe.com.bn.sach.domain.BnchfTasaInteres;
import pe.com.bn.sach.dao.ParametroDAO;
import pe.com.bn.sach.dao.datacom.Bnchf01CatalogoProductoSQL;
import pe.com.bn.sach.dao.datacom.Bnchf06TarifarioSQL;
import pe.com.bn.sach.dao.datacom.Bnchf07TasaInteresSQL;
import pe.com.bn.sach.dao.datacom.Bnchf08TarifaProductoSQL;
import pe.com.bn.sach.dao.datacom.Bnchf49DesgravamenSQL;
import pe.com.bn.sach.domain.Bnchf02Cliente;
public class ParametroImpl implements   ParametroDAO{

	private static Logger log = Logger.getLogger(ParametroImpl.class.getName());
	protected SqlMapClient sqlMap = null;
	//private SqlMapClient sqlMapConsulta = null;
	
	public void setSqlMap(SqlMapClient sqlMap) {
		this.sqlMap = sqlMap;
	}

	protected final Log logger = LogFactory.getLog(getClass());
	
	/**********************lista PARAMETRO CONTRATO**************************/
	
	public List listaparamContrato(Bnchf54ParametroProducto bnchf54ParametroProducto) throws Exception{
		return sqlMap.queryForList("sqlParametros.listaparamContrato",bnchf54ParametroProducto);
	}
	 
	/**********************lista PARAMETRO DOCUMENTO TITULAR**************************/
	
	public List listaparamDocumentitular(Bnchf54ParametroProducto bnchf54ParametroProducto) throws Exception{
		return sqlMap.queryForList("sqlParametros.listaparamDocumentitular",bnchf54ParametroProducto);
	}
	
	/**********************lista PARAMETRO requerimientos Familiar **************************/
	
	public List listaParamReqsFam(Bnchf54ParametroProducto bnchf54ParametroProducto) throws Exception{
		return sqlMap.queryForList("sqlParametros.listaParamReqsFam",bnchf54ParametroProducto);
	}
	
	/**********************lista PARAMETRO requerimientos TITULAR  **************************/
	
	public List listaParamReqstit(Bnchf54ParametroProducto bnchf54ParametroProducto) throws Exception{
		return sqlMap.queryForList("sqlParametros.listaParamReqstit",bnchf54ParametroProducto);
	}
	
	/**********************lista PARAMETRO requerimientos TITULAR  **************************/
	
	public List listaParamSitclaboral(Bnchf54ParametroProducto bnchf54ParametroProducto) throws Exception{
		return sqlMap.queryForList("sqlParametros.listaParamSitclaboral",bnchf54ParametroProducto);
	}
	
	/**********************lista PARAMETRO requerimientos PRODUCTO  **************************/
	
	public List listaParametroProcucto(Bnchf54ParametroProducto bnchf54ParametroProducto) throws Exception{
		return sqlMap.queryForList("sqlParametros.listaParametroProcucto",bnchf54ParametroProducto);
	}
	
	/**********************lista Tasa de Interes Efectiva Anual  **************************/
	
	public List listaParamtasainteres(Bnchf54ParametroProducto bnchf54ParametroProducto) throws Exception{
		return sqlMap.queryForList("sqlParametros.listparamtasainter",bnchf54ParametroProducto);
	}
	
	/**********************lista Porcentaje Desgravamen   **************************/
	
	public List listaparam_reqs_desgrav(Bnchf54ParametroProducto bnchf54ParametroProducto) throws Exception{
		
		
		
		
		
		
		List l =    sqlMap.queryForList("sqlParametros.listaparamdesgrav",bnchf54ParametroProducto);
		
		return sqlMap.queryForList("sqlParametros.listaparamdesgrav",bnchf54ParametroProducto);
	}
	
	

	public String EdadCliente(Bnchf02Cliente bnchf02Cliente) throws Exception{    
        try {
            String id = (String)sqlMap.queryForObject("sqlExpIngresos.edadCliente",bnchf02Cliente);
             return id;
        } catch (Exception e) {
            throw new Exception("Error EdadCliente: " + e);
        }
    }
	
	
	
	public Bnchf54ParametroProducto getParametrosFinancieroOpen(Bnchf54ParametroProducto bnchf54ParametroProducto) throws Exception{
		return (Bnchf54ParametroProducto)sqlMap.queryForObject("sqlParametroProducto.getParametrosFinancieroOpen",bnchf54ParametroProducto);
	}
	
	public void guardarParametroFinancieroOpen(Bnchf54ParametroProducto bnchf54ParametroProducto) throws Exception{
		
		try{
			sqlMap.startTransaction();
			sqlMap.insert("sqlParametroProducto.guardarParametroFinancieroOpen",bnchf54ParametroProducto);
			sqlMap.commitTransaction();
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}finally{
			sqlMap.endTransaction();
		}
	}
	public void actualizaParametroFinancieroOpen(Bnchf54ParametroProducto bnchf54ParametroProducto) throws Exception{
		
		try{
			sqlMap.startTransaction();
			sqlMap.update("sqlParametroProducto.actualizaParametroFinancieroOpen",bnchf54ParametroProducto);
			sqlMap.commitTransaction();
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}finally{
			sqlMap.endTransaction();
		}

	}
	/**
	 * @author RIX
	 */
	public BnchfCatalogoProducto obtenerCatalogoProducto(BnchfCatalogoProducto catalogoProducto, Connection cnx) throws Exception{
		
		Bnchf01CatalogoProductoSQL bnchf01CatalogoProductoSQL = new Bnchf01CatalogoProductoSQL(cnx);
		return bnchf01CatalogoProductoSQL.select(catalogoProducto);
	}
	public void guardarCatalogoProducto(BnchfCatalogoProducto catalogoProducto, Connection cnx) throws Exception{
		Bnchf01CatalogoProductoSQL bnchf01CatalogoProductoSQL = new Bnchf01CatalogoProductoSQL(cnx);
		bnchf01CatalogoProductoSQL.insertar(catalogoProducto);
	}
	public void actualizarCatalogoProducto(BnchfCatalogoProducto catalogoProducto, Connection cnx) throws Exception{
		Bnchf01CatalogoProductoSQL bnchf01CatalogoProductoSQL = new Bnchf01CatalogoProductoSQL(cnx);
		bnchf01CatalogoProductoSQL.update(catalogoProducto);
	}
	
	public List obtenerTarifas(BnchfTarifa bnchfTarifa, Connection cnx) throws Exception{
		List result = null;
		Bnchf06TarifarioSQL bnchf06TarifarioSQL = new Bnchf06TarifarioSQL(cnx);
		return bnchf06TarifarioSQL.selectList(bnchfTarifa);
	}
	
	public BnchfTarifa obtenerTarifa(BnchfTarifa bnchfTarifa, Connection cnx) throws Exception{
		BnchfTarifa result = null;	
			Bnchf06TarifarioSQL bnchf06TarifarioSQL = new Bnchf06TarifarioSQL(cnx);
		return bnchf06TarifarioSQL.select(bnchfTarifa);
	}
	
	public BnchfTarProd obtenerTarifaProducto(BnchfTarProd bnchfTarProd, Connection cnx) throws Exception{
		Bnchf08TarifaProductoSQL bnchf08TarifaProductoSQL = new Bnchf08TarifaProductoSQL(cnx);
		return bnchf08TarifaProductoSQL.select(bnchfTarProd);
	}
	
	public void insertTarifaProducto(BnchfTarProd bnchfTarProd, Connection cnx) throws Exception{
		Bnchf08TarifaProductoSQL bnchf08TarifaProductoSQL = new Bnchf08TarifaProductoSQL(cnx);
		bnchf08TarifaProductoSQL.insertar(bnchfTarProd);
	}
	public void updateTarifaProducto(BnchfTarProd bnchfTarProd, Connection cnx) throws Exception{
		Bnchf08TarifaProductoSQL bnchf08TarifaProductoSQL = new Bnchf08TarifaProductoSQL(cnx);
		bnchf08TarifaProductoSQL.update(bnchfTarProd);
	}
	
	/*
	 * PARAMETROS NO FINANCIEROS
	 **/
	
	public Bnchf54ParamDocumentTitular getParamDocumentoTitular(Bnchf54ParamDocumentTitular bnchf54ParamDocumentTitular) throws Exception{
		
		return(Bnchf54ParamDocumentTitular)sqlMap.queryForObject("sqlParametroProducto.getParamDocumentoTitular",bnchf54ParamDocumentTitular);
	}
	public Bnchf54ParamReqsFam getParamReqsFam(Bnchf54ParamReqsFam bnchf54ParamReqsFam) throws Exception{
		
		return(Bnchf54ParamReqsFam)sqlMap.queryForObject("sqlParametroProducto.getParamReqsFam",bnchf54ParamReqsFam);
	}
	public Bnchf54ParamReqsTit getParamReqsTit(Bnchf54ParamReqsTit bnchf54ParamReqsTit) throws Exception{
		
		return(Bnchf54ParamReqsTit)sqlMap.queryForObject("sqlParametroProducto.getParamReqsTit",bnchf54ParamReqsTit);
	}
	
	public void updateParamDocumentoTitular(Bnchf54ParamDocumentTitular bnchf54ParamDocumentTitular) throws Exception{
			
		try{
			sqlMap.startTransaction();
			sqlMap.update("sqlParametroProducto.updateParamDocumentoTitular",bnchf54ParamDocumentTitular);
			sqlMap.commitTransaction();
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}finally{
			sqlMap.endTransaction();
		}
		
	}
	public void updateParamReqsFam(Bnchf54ParamReqsFam bnchf54ParamReqsFam) throws Exception{
		try{
			sqlMap.startTransaction();
			sqlMap.update("sqlParametroProducto.updateParamReqsFam",bnchf54ParamReqsFam);
			sqlMap.commitTransaction();
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}finally{
			sqlMap.endTransaction();
		}
		
	}
	public void updateParamReqsTit(Bnchf54ParamReqsTit bnchf54ParamReqsTit) throws Exception{
		try{
			sqlMap.startTransaction();
			sqlMap.update("sqlParametroProducto.updateParamReqsTit",bnchf54ParamReqsTit);
			sqlMap.commitTransaction();
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}finally{
			sqlMap.endTransaction();
		}

	}
	
	public void insertParamDocumentoTitular(Bnchf54ParamDocumentTitular bnchf54ParamDocumentTitular) throws Exception{
		try{
			sqlMap.startTransaction();
			sqlMap.insert("sqlParametroProducto.insertParamDocumentoTitular",bnchf54ParamDocumentTitular);
			sqlMap.commitTransaction();
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}finally{
			sqlMap.endTransaction();
		}
		
	}
	public void insertParamReqsFam(Bnchf54ParamReqsFam bnchf54ParamReqsFam) throws Exception{
		try{
			sqlMap.startTransaction();
			sqlMap.insert("sqlParametroProducto.insertParamReqsFam",bnchf54ParamReqsFam);
			sqlMap.commitTransaction();
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}finally{
			sqlMap.endTransaction();
		}
		
	}
	public void insertParamReqsTit(Bnchf54ParamReqsTit bnchf54ParamReqsTit) throws Exception{
		try{
			sqlMap.startTransaction();
			sqlMap.insert("sqlParametroProducto.insertParamReqsTit",bnchf54ParamReqsTit);
			sqlMap.commitTransaction();
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}finally{
			sqlMap.endTransaction();
		}
		
	}
	
	/*
	 *  TASA DE INTERES 
	 */
	
	public List getTasaInteres(Bnchf54ParamTasaInteres bnchf54ParamTasaInteres) throws Exception{
	
		return sqlMap.queryForList("sqlParametroProducto.getTasaInteres",bnchf54ParamTasaInteres);
	}
	public List getTasaInteresDatacom(BnchfTasaInteres bnchfTasaInteres, Connection cnx) throws Exception{
	
		//return sqlMapConsulta.queryForList("sqlParametroProducto.getTasaInteresDatacom",bnchfTasaInteres);
		Bnchf07TasaInteresSQL bnchf07TasaInteresSQL = new Bnchf07TasaInteresSQL(cnx);
		return bnchf07TasaInteresSQL.select(bnchfTasaInteres);
	}
	public List getHistorial(BnchfTasaInteres bnchfTasaInteres, Connection cnx) throws Exception{
	//(" [ getHistorial ] ");
		//return sqlMapConsulta.queryForList("sqlParametroProducto.getTasaInteresDatacom",bnchfTasaInteres);
		Bnchf07TasaInteresSQL bnchf07TasaInteresSQL = new Bnchf07TasaInteresSQL(cnx);
		return bnchf07TasaInteresSQL.selectAll(bnchfTasaInteres);
	}
	
	public String maxTimestampTasaInteres(BnchfTasaInteres bnchfTasaInteres, Connection cnx) throws Exception{
		//(" [ maxTimestamp ] ");
		Bnchf07TasaInteresSQL bnchf07TasaInteresSQL = new Bnchf07TasaInteresSQL(cnx);
		return bnchf07TasaInteresSQL.maxTimestamp(bnchfTasaInteres);
		
	}
	public void updateTasaInteres(Bnchf54ParamTasaInteres bnchf54ParamTasaInteres) throws Exception{
		//(" [ updateTasaInteres ] ");

		try{
			sqlMap.startTransaction();
			sqlMap.update("sqlParametroProducto.updateTasaInteres",bnchf54ParamTasaInteres);
			sqlMap.commitTransaction();
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}finally{
			sqlMap.endTransaction();
		}
	}
	
	public Bnchf54ParamTasaInteres getTasaInteresxIdPlazo(Bnchf54ParamTasaInteres bnchf54ParamTasaInteres) throws Exception{
	
		return (Bnchf54ParamTasaInteres)sqlMap.queryForObject("sqlParametroProducto.getTasaInteresxIdPlazo",bnchf54ParamTasaInteres);
	}
	public void insertTasaInteres(Bnchf54ParamTasaInteres bnchf54ParamTasaInteres) throws Exception{
		
		
		try{
			sqlMap.startTransaction();
			sqlMap.insert("sqlParametroProducto.insertTasaInteres",bnchf54ParamTasaInteres);
			sqlMap.commitTransaction();
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}finally{
			sqlMap.endTransaction();
		}
		
	}
	public void insertTasaDatacom(BnchfTasaInteres bnchfTasaInteres, Connection cnx) throws Exception{
		
		Bnchf07TasaInteresSQL bnchf07TasaInteresSQL = new Bnchf07TasaInteresSQL(cnx);
		bnchf07TasaInteresSQL.insertar(bnchfTasaInteres);
	}
	public void updateTasaDatacom(BnchfTasaInteres bnchfTasaInteres, Connection cnx) throws Exception{
		
		Bnchf07TasaInteresSQL bnchf07TasaInteresSQL = new Bnchf07TasaInteresSQL(cnx);
		bnchf07TasaInteresSQL.update(bnchfTasaInteres);
	}
	public BnchfTasaInteres existeTasaInteres(BnchfTasaInteres bnchfTasaInteres, Connection cnx) throws Exception{
		
		Bnchf07TasaInteresSQL bnchf07TasaInteresSQL = new Bnchf07TasaInteresSQL(cnx);
		return bnchf07TasaInteresSQL.existe(bnchfTasaInteres);
		
	}
	
	/*
	 *  DESGRAVAMEN
	 */
	
	public List getDesgravamen(Bnchf54ParamReqsDesgrav bnchf54ParamReqsDesgrav) throws Exception{
		
		return sqlMap.queryForList("sqlParametroProducto.getDesgravamen",bnchf54ParamReqsDesgrav);
	}
	public List getDesgravamenDatacom(BnchfDesgravamen bnchfDesgravamen, Connection cnx) throws Exception{
	
		Bnchf49DesgravamenSQL bnchf49DesgravamenSQL = new Bnchf49DesgravamenSQL(cnx);
		return bnchf49DesgravamenSQL.select(bnchfDesgravamen);
		
	}
	public List getHistorial(BnchfDesgravamen bnchfDesgravamen, Connection cnx) throws Exception{
		
		Bnchf49DesgravamenSQL bnchf49DesgravamenSQL = new Bnchf49DesgravamenSQL(cnx);
		return bnchf49DesgravamenSQL.selectAll(bnchfDesgravamen);
		
	}
	
	public String maxTimestampDesgravamen(BnchfDesgravamen bnchfDesgravamen, Connection cnx) throws Exception{
		
		Bnchf49DesgravamenSQL bnchf49DesgravamenSQL = new Bnchf49DesgravamenSQL(cnx);
		return bnchf49DesgravamenSQL.maxTimestamp(bnchfDesgravamen);
		
	}
	public BnchfDesgravamen existeDesgravamen(BnchfDesgravamen bnchfDesgravamen, Connection cnx) throws Exception{
	
		Bnchf49DesgravamenSQL bnchf49DesgravamenSQL = new Bnchf49DesgravamenSQL(cnx);
		return bnchf49DesgravamenSQL.existe(bnchfDesgravamen);
		
	}
	public void updateDesgravamen(Bnchf54ParamReqsDesgrav bnchf54ParamReqsDesgrav) throws Exception{
		
		try{
			sqlMap.startTransaction();
			sqlMap.update("sqlParametroProducto.updateDesgravamen",bnchf54ParamReqsDesgrav);
			sqlMap.commitTransaction();
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}finally{
			sqlMap.endTransaction();
		}
	}
	
	public Bnchf54ParamReqsDesgrav getDesgravamenXId(Bnchf54ParamReqsDesgrav bnchf54ParamReqsDesgrav) throws Exception{
		
		return (Bnchf54ParamReqsDesgrav)sqlMap.queryForObject("sqlParametroProducto.getDesgravamenXId",bnchf54ParamReqsDesgrav);
	}
	public void insertDesgravamen(Bnchf54ParamReqsDesgrav bnchf54ParamReqsDesgrav) throws Exception{
		
		try{
			sqlMap.startTransaction();
			sqlMap.insert("sqlParametroProducto.insertDesgravamen",bnchf54ParamReqsDesgrav);
			sqlMap.commitTransaction();
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}finally{
			sqlMap.endTransaction();
		}
		
	}

	
	public void insertDesgravamenDatacom(BnchfDesgravamen bnchfDesgravamen, Connection cnx) throws Exception{
		
		Bnchf49DesgravamenSQL bnchf49DesgravamenSQL = new Bnchf49DesgravamenSQL(cnx);
		bnchf49DesgravamenSQL.insertar(bnchfDesgravamen);
	}
	public void updateDesgravamenDatacom(BnchfDesgravamen bnchfDesgravamen, Connection cnx) throws Exception{
		
		Bnchf49DesgravamenSQL bnchf49DesgravamenSQL = new Bnchf49DesgravamenSQL(cnx);
		bnchf49DesgravamenSQL.update(bnchfDesgravamen);
	}
	

}
